#!/usr/bin/env python
from __future__ import print_function
import glob
import os
from PIL import Image

hdrs = []
data = []
imgs = []

def encode_pixels(img):
	r = ''
        if isinstance(img[0], int):
	        img = [ (x > 0 and '1' or '0') for x in img]
        else:
	        img = [ (x[0] + x[1] + x[2] > 384 and '1' or '0') for x in img]
	for i in range(len(img) // 8):
		c = ''.join(img[i * 8 : i * 8 + 8])
		r += '0x%02x, ' % int(c, 2)
	return r

cnt = 0
for fn in sorted(glob.glob('*.png')):
	print('Processing:', fn)
	im = Image.open(fn)
	name = os.path.splitext(fn)[0]
	w, h = im.size
	if w % 8 != 0:
		raise Exception('Width must be divisable by 8! (%s is %dx%d)' % (fn, w, h))
	img = list(im.getdata())
	hdrs.append('extern const BITMAP bmp_%s;\n' % name)
	imgs.append('const BITMAP bmp_%s = {%d, %d, bmp_%s_data};\n' % (name, w, h, name))
	data.append('const uint8_t bmp_%s_data[] = { %s};\n' % (name, encode_pixels(img)))
	cnt += 1

with open('../bitmaps.c', 'wt') as f:
	f.write('#include "bitmaps.h"\n\n')
	for i in range(cnt):
		f.write(data[i])
	f.write('\n')
	for i in range(cnt):
		f.write(imgs[i])
	f.close()

with open('../bitmaps.h', 'wt') as f:
	f.write('''#ifndef __BITMAPS_H__
#define __BITMAPS_H__

#include <stdint.h>

typedef struct {
	uint8_t width, height;
	const uint8_t *data;
} BITMAP;

''')

	for i in range(cnt):
		f.write(hdrs[i])

	f.write('\n#endif\n')
	f.close()
